package cn.wolfcode.business.domain;

import cn.wolfcode.common.annotation.Excel;
import cn.wolfcode.common.core.domain.BaseEntity;
import lombok.Getter;
import lombok.Setter;
import org.apache.commons.lang3.builder.ToStringBuilder;
import org.apache.commons.lang3.builder.ToStringStyle;

import java.math.BigDecimal;

/**
 * 汽车服务项目实体类
 * 用于存储汽车维修保养的各种服务项目信息
 * 对应数据库中的 bus_service_item 表
 * 
 * @author wolfcode
 * @date 2025-09-19
 */
@Getter
@Setter

public class BusServiceItem extends BaseEntity
{
    private static final long serialVersionUID = 1L;

    // 套餐类型常量定义
    public static final Integer CARPACKAGE_NO = 0;   // 不是套餐 - 单独的服务项目
    public static final Integer CARPACKAGE_YES = 1;  // 是套餐 - 多个服务项目的组合

    // 审核状态常量定义
    public static final Integer AUDITSTATUS_INIT = 0;        // 初始化 - 刚创建，还未提交审核
    public static final Integer AUDITSTATUS_AUDITING = 1;    // 审核中 - 已提交，正在审核流程中
    public static final Integer AUDITSTATUS_APPROVED = 2;    // 审核通过 - 审核成功，可以使用
    public static final Integer AUDITSTATUS_REPLY = 3;       // 审核拒绝 - 审核失败，需要修改
    public static final Integer AUDITSTATUS_NO_REQUIRED = 4; // 无需审核 - 某些项目可能不需要审核

    // 销售状态常量定义
    public static final Integer SALESTATUS_OFF = 0;  // 下架 - 客户看不到，无法预约
    public static final Integer SALESTATUS_ON = 1;   // 上架 - 客户可以看到并预约

    /** 服务项目ID - 每个服务项目的唯一标识 */
    private Long id;

    /** 服务项目名称 - 如"更换机油"、"轮胎保养"等 */
    @Excel(name = "服务项名称")
    private String name;

    /** 服务项目原价 - 未打折前的价格 */
    @Excel(name = "服务项原价")
    private BigDecimal originalPrice;

    /** 服务项目折扣价 - 实际销售价格（可能有优惠） */
    @Excel(name = "服务项折扣价")
    private BigDecimal discountPrice;

    /** 是否为套餐 - 1表示是套餐（多个服务组合），0表示单项服务 */
    @Excel(name = "是否套餐【1是/0否】")
    private Integer carPackage;

    /** 备注信息 - 服务项目的详细描述或特殊说明 */
    @Excel(name = "备注信息")
    private String info;

    /** 服务分类 - 0维修（修理故障）/1保养（定期维护）/2其他 */
    @Excel(name = "服务分类【0维修/1保养/2其他】")
    private Integer serviceCatalog;

    /** 审核状态 - 服务项目需要经过审核才能上架销售 */
    @Excel(name = "审核状态【0初始化/1审核中/2审核通过/3审核拒绝/4无需审核】")
    private Integer auditStatus;

    /** 上架状态 - 1表示已上架（客户可见），0表示未上架（客户不可见） */
    @Excel(name = "上架状态【1已上架/0未上架】")
    private Integer saleStatus;


}
